package com.ruoyi.tzai.service;

import org.dromara.x.file.storage.core.FileInfo;
import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;

/**
 * 文件上传服务接口
 * 
 * @author tzai
 * @date 2025-10-28
 */
public interface IFileUploadService 
{
    /**
     * 上传音频文件
     * 
     * @param inputStream 文件输入流
     * @param fileName 文件名
     * @param fileSize 文件大小
     * @return FileInfo 对象（包含所有文件信息）
     */
    FileInfo uploadAudio(InputStream inputStream, String fileName, long fileSize);
    
    /**
     * 上传图片文件
     * 
     * @param inputStream 文件输入流
     * @param fileName 文件名
     * @param fileSize 文件大小
     * @return FileInfo 对象（包含所有文件信息）
     */
    FileInfo uploadImage(InputStream inputStream, String fileName, long fileSize);
    
    /**
     * 通用文件上传（支持MultipartFile）
     * 
     * @param file MultipartFile对象
     * @param fileType 文件类型（image/audio/document/video）
     * @return FileInfo 对象（包含所有文件信息）
     */
    FileInfo uploadFile(MultipartFile file, String fileType);
    
    /**
     * 删除文件
     * 
     * @param fileUrl 文件URL
     * @return 是否成功
     */
    boolean deleteFile(String fileUrl);
    
    /**
     * 通过 FileInfo 下载文件
     * 
     * @param fileInfo 文件信息对象
     * @return 文件字节数组
     */
    byte[] downloadFile(FileInfo fileInfo);
    
    /**
     * 生成阿里云OSS签名URL（用于直接访问）
     * 
     * @param fileInfo 文件信息对象
     * @param expireMinutes 过期时间（分钟）
     * @return 签名URL
     */
    String generateSignedUrl(FileInfo fileInfo, int expireMinutes);

    /**
     * 上传音频数据到OSS（指定路径）
     * 用于任务队列系统生成TTS音频
     * 
     * @param audioData 音频二进制数据
     * @param ossKey OSS存储路径（例如: audio/temp/task_123_cn_s0.mp3）
     * @return 音频访问URL
     */
    String uploadAudioToOSS(byte[] audioData, String ossKey);
}

